<?php

class Reportes_Model_Usuarios extends Model_Cna {
	/**
	 * Almacena los datos del usuario en la base de datos
	 * @param array $datos Los datos del usuario
	 */
	public function guardarUsuario($datos) {
		$usuariosTable = new Reportes_Model_DbTable_Usuarios();
		$condicion="";
		if(isset($datos["codusuario"]) && !empty($datos["codusuario"])) {
    		$condicion = " AND codusuario <> {$datos["codusuario"]}";
		}
		if(isset($datos["cedula"])){
			$row = $usuariosTable->fetchRow("cedula={$datos["cedula"]}{$condicion}");
			if(!is_null($row)) {
				throw new Exception("El número de identificación '{$datos["cedula"]}' ya existe. Por favor verifique la información.");
				return $row;
			}
		}
		if(isset($datos["codusuario"]) && !empty($datos["codusuario"])) {
			$row = $usuariosTable->find($datos["codusuario"])->current();
			return $row->setFromArray($datos)->save();
		} else {
			unset($datos["codusuario"]);
			$key = $usuariosTable->createRow($datos)->save();
			$this->generarNombreUsuario($key);
			return $key;
		}
	}
	/**
	 * Genera y actualiza automáticamente el nombre de usuario
	 * @param $codusuario Código del usuario
	 */
	private function generarNombreUsuario($codusuario){
		$usuariosTable = new Reportes_Model_DbTable_Usuarios();
		$row = $usuariosTable->find($codusuario)->current()->toArray();
		if(is_null($row)) {
			throw new Exception("El usuario {$codusuario} no existe. Método generarNombreUsuario().");
		}
		
		$nombres 	= $row["nombres"];
		$apellidos	= $row["apellidos"];
		
		$letra_nombre 	= App_Util_StringUtil::quitar_acentos(substr($nombres,0,1));
	
		$letra_apellidos = explode(" ",$apellidos);
		$letra_apellidos[0] = App_Util_StringUtil::quitar_acentos($letra_apellidos[0]);

		$nombre_usuario =  strtolower($letra_nombre.$letra_apellidos[0]);
		$r = $usuariosTable->fetchRow("nombreusuario='{$nombre_usuario}' AND codusuario<>{$codusuario}");
		$contador=0;
		while(!is_null($r)) {
			$contador++;
			$nombre_usuario = $nombre_usuario.$contador;
			$r = $usuariosTable->fetchRow("nombreusuario='{$nombre_usuario}' AND codusuario<>{$codusuario}");
		}

		$datos["nombreusuario"]=$nombre_usuario;
		$usuariosTable->update($datos,"codusuario={$codusuario}");
	}
	public function asignarRoles($codusuario,$arregloRoles){
		$usuariosTable = new Reportes_Model_DbTable_Usuarios();
		$usuariosTable->getAdapter()->beginTransaction();
		try {
			//DELETE FROM rolesusuarios WHERE codusuario=?
			//$usuariosTable->getAdapter()->delete("rolesusuarios_cna_migrar","codusuario={$codusuario}");
			$datos=array();
			$datos["codusuario"]=$codusuario;
			$datos["favorito"]="N";
			for($i=0;$i<count($arregloRoles);$i++){
				$datos["codrol"]=$arregloRoles[$i];
				$usuariosTable->getAdapter()->insert("rolesusuarios_cna_migrar",$datos);
			}
			$usuariosTable->getAdapter()->commit();
		} catch (Exception $e) {
			$usuariosTable->getAdapter()->rollBack();
			throw $e;
		}
	}
	
	/**
	 * Almacena los datos del informe
	 * @param array $datos Los datos del informe
	 * @return int El codigo del informe
	 */
	public function guardarDatosBancarios(array $datos) {
		$usuariosTable = new Reportes_Model_DbTable_Cuentas();
		if(!empty($datos["codcuenta"])) {
			return $codcuenta = $usuariosTable->find($datos["codcuenta"])->current()->setFromArray($datos)->save();
		} else {
		    unset($datos["codcuenta"]);
			return $codcuenta = $usuariosTable->createRow($datos)->save();
		}
	}
	
	/**
	 * Almacena los datos de la información del par
	 * @param array $datos Los datos del par
	 * @return int El codigo de la información del par
	 */
	public function guardarDatosPar(array $datos) {
		$usuariosTable = new Reportes_Model_DbTable_Informacionpar();
		if(!empty($datos["codinformacion"])) {
			return $codinformacion = $usuariosTable->find($datos["codinformacion"])->current()->setFromArray($datos)->save();
		} else {
		    unset($datos["codinformacion"]);
			return $codinformacion = $usuariosTable->createRow($datos)->save();
		}
	}


	/**
	 * Almacena los datos de idioma de un par
	 * @param array $datos Los datos para el registro
	 */
	public function guardarIdiomaPar($datos) {
		$usuariosTable = new Reportes_Model_DbTable_Usuarios();
		if (!empty($datos["codidiomausuario"])){
		    return $usuariosTable->getAdapter()->update("idiomasusuario", $datos ,"codidiomausuario={$datos["codidiomausuario"]}");
		}else{
		    unset($datos["codidiomausuario"]);
		    return $usuariosTable->getAdapter()->insert("idiomasusuario", $datos);
		}
	}
	
}
